package com.dlc.shop.user.common.dao;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dlc.shop.user.common.dto.CostPerPopupDTO;
import com.dlc.shop.user.common.model.CostPerPopup;
import com.dlc.shop.user.common.vo.CostPerPopupVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 弹窗广告
 * @author TRACK
 */
public interface CostPerPopupMapper extends BaseMapper<CostPerPopup> {

    /**
     * 获取弹窗广告列表
     * @param page
     * @param costPerPopupDTO 查询参数
     * @return 弹窗广告列表
     */
    IPage<CostPerPopupVO> page(Page page, @Param("costPerPopup") CostPerPopupDTO costPerPopupDTO);

    /**
     * 根据店铺id获取投放状态的弹窗广告
     * @param shopId
     * @return
     */
    List<CostPerPopupVO> listByShopId(@Param("shopId") Long shopId);

    /**
     * 根据弹窗广告id获取弹窗广告
     * @param popupId 弹窗广告id
     * @return 弹窗广告
     */
    CostPerPopup getByPopupId(@Param("popupId") Long popupId);

    /**
     * 保存弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void save(@Param("costPerPopup") CostPerPopup costPerPopup);

    /**
     * 更新弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void update(@Param("costPerPopup") CostPerPopup costPerPopup);

    /**
     * 根据弹窗广告id删除弹窗广告
     * @param popupId id
     */
    void deleteById(@Param("popupId") Long popupId);

    /**
     * 根据弹窗广告id失效弹窗广告
     * @param popupId id
     */
    void invalid(@Param("popupId") Long popupId);

    /**
     * 根据参数获取对应列表
     * @param costPerPopup 参数
     * @return 列表
     */
    List<CostPerPopupVO> listByParam(@Param("costPerPopup") CostPerPopup costPerPopup);

    /**
     * 根据状态获取需要改变成这个状态的广告
     * @param status
     * @return
     */
    List<Long> listPopUpByStatus(@Param("status") Integer status);

    /**
     * 获取需要投放||需要结束的弹窗广告
     * @return
     */
    List<Long> listShouldChangePopUp();

    /**
     * 更新状态
     * @param status
     */
    void updateStatus(@Param("status") Integer status);

    /**
     * 根据店铺获取未结束的商品详情页的弹窗广告列表
     * @param shopId
     * @return
     */
    List<CostPerPopup> listNotEndByShopId(@Param("shopId") Long shopId);

    /**
     * 根据店铺获取未结束的弹窗广告列表
     * @param shopIds
     * @return
     */
    List<CostPerPopup> listNotEndLinkByShopId(@Param("shopIds") List<Long> shopIds);

    /**
     * 批量更新弹窗广告为结束
     * @param popupIds
     */
    void updateStatusBatch(@Param("popupIds") List<Long> popupIds);
}
